home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
PC World Komputer 2010 April
/
PCWorld0410.iso
/
pluginy Firefox
/
56804
/
56804.xpi
/
chrome
/
content
/
seoPRAlexa.js
< prev
next >
Wrap
Text File
|
2010-01-31
|
22KB
|
556 lines
if(!com) var com={};
if(!com.seostatus) com.seostatus={};
com.seostatus.seoPRAlexa = function(){
var pub = {};
pub.pref = Components.classes["@mozilla.org/preferences-service;1"].getService(Components.interfaces.nsIPrefService);
pub.stb_AlexaRequest;
pub.SiteInfo = function(url, sentType, sentValue) {
this.url=url;
this.type=sentType;
this.value=sentValue;
}
pub.lastURL = "NONE";
pub.allURLs = new Array();
pub.aSite = new pub.SiteInfo("about:blank", 1, "N");
pub.allURLs.push(pub.aSite);
pub.aSite = new pub.SiteInfo("about:blank", 2, "N");
pub.allURLs.push(pub.aSite);
pub.indexOfSite = function(theArr, site, sentType){
for (var i = 0; i < theArr.length; i++) {
if (theArr[i].url == site && theArr[i].type == sentType){
return i;
}
}
return -1;
}
pub.hasThis = function( theArr, site, sentType){
return pub.indexOfSite(theArr, site, sentType) >= 0;
}
pub.justLoaded = function(){
if (pub.lastURL == content.document.location){
return;
}
else{
pub.lastURL = content.document.location;
var alexaBut = document.getElementById('SEOTB-Alexa');
alexaBut.setAttribute("tooltiptext", "Alexa Rank: N/A");
alexaBut.setAttribute("image", "chrome://seostatus/skin/pr/aprN.gif");
pub.getPR();
}
}
pub.getPR = function(){
if (pub.hasThis(pub.allURLs, content.document.location, 2)){
//if (is_in_array(allURLs, content.document.location, 2)){
// alert("caught " + content.document.location + " type pagerank" );
// getPRNum(content.document.location);
var myIndex1 = pub.indexOfSite(pub.allURLs, content.document.location, 2);
var myPR = pub.allURLs[myIndex1].value;
//the following check is to rid ourselves of a hidden bug.
if (myPR > 10) com.seostatus.gprAlg.initPagerankStatus(content.document.location);
else pub.updateText(myPR, 2);
//pub.updateText(sentValue, 2);
}
else {
//getPRNum(content.document.location);
//var strURL = new String (sentURL);
com.seostatus.gprAlg.initPagerankStatus(content.document.location)
}
if (pub.hasThis(pub.allURLs, pub.getDomainOnly(content.document.location), 1)){
//if (is_in_array(pub.allURLs, content.document.location, 1)){
var myIndex2 = pub.indexOfSite(pub.allURLs, pub.getDomainOnly(content.document.location), 1);
var myValueAlexa = pub.allURLs[myIndex2].value;
pub.updateText(myValueAlexa, 1);
//alert("already accounted for " + content.document.location);
}
else {
//alert ("doc.dom: "+document.domain);
// alert ("chopped: " +pub.getDomainOnly(content.document.location));
// getAlexaNum(pub.getDomainOnly(content.document.location));
//alert("before");
pub.initAlexaStatus(pub.getDomainOnly(content.document.location));
//alert("after");
//pub.updateLexi(content.document.location);
}
}
pub.shouldICheckAlexa = function(){
var branch = pub.pref.getBranch("seostatus.");
try
{
var alexaButSB = document.getElementById('SEOTB-Alexa-status');
var alexaBut = document.getElementById('SEOTB-Alexa');
//alert("before");
if (branch.prefHasUserValue("stb_hide_the_meters")){
var hideMeters = branch.getBoolPref("stb_hide_the_meters");
if (hideMeters == true) return false;
}
if (branch.prefHasUserValue("stb_hide_the_meters")){
var licenseAgreed = branch.getBoolPref("stb_alexa_agree");
if (licenseAgreed != true) return false;
}
var currSite = new String(content.document.location);
if (currSite.indexOf("@") != -1) return false;
if (currSite.indexOf("http") == -1) return false;
//alert("license: " + licenseAgreed);
if(branch.prefHasUserValue("stb_alexa_restricted_total_num")){
var numSites = branch.getIntPref("stb_alexa_restricted_total_num");
//alert(numSites);
for (var i=0; i < numSites; i++){
var aSite = branch.getCharPref("stb_alexa_restricted_sites["+i+"]");
if (currSite.indexOf(aSite) != -1) {
return false;
}
//alert ("CurrentSite: " + currSite + "\nstoredSite: " + aSite);
}
}
return true;
}
catch(e)
{
alert("error: " + e);
return true;
}
}
pub.initAlexaStatus = function(localname)
{
var branch = pub.pref.getBranch("seostatus.");
var url = window._content.document.location.toString();
if (!pub.shouldICheckAlexa()) return;
var alexaBut = document.getElementById('SEOTB-Alexa');
var alexaButSB = document.getElementById('SEOTB-Alexa-status');
alexaBut.setAttribute("tooltiptext", "Alexa Rank: Computing...");
alexaBut.setAttribute("image", "chrome://seostatus/skin/pr/aprThink.gif");
alexaButSB.setAttribute("tooltiptext", "Alexa Rank: Computing...");
alexaButSB.setAttribute("src", "chrome://seostatus/skin/pr/alN.png");
//
// var stb_InstallDate = branch.getCharPref( "installdate" );
if(branch.prefHasUserValue("stb_installDate")){
// alert("1");
var stb_InstallDate = branch.getIntPref("stb_installDate");
// alert(stb_InstallDate);
try
{
var dnsService = Components.classes["@mozilla.org/network/dns-service;1"].getService( Components.interfaces.nsIDNSService );
//var localname = dnsService.myHostName;
var localhost = dnsService.myHostName;
var dnsRecord = dnsService.resolve( localhost, false );
var stb_LocalIP = dnsRecord.getNextAddrAsString();
//var stb_LocalIP = '<!--#echo var="REMOTE_ADDR"-->';
}
catch(e)
{
//alert(e);//ignore
}
var encodedUrl = pub.urlEncode( url );
var querystring = "http://";
querystring += "xml.alexa.com/data?cli=10&dat=nsa&ver=rubyweb.org&uid=" + stb_InstallDate + "&userip=" + stb_LocalIP + "&url=" + encodedUrl;
pub.stb_AlexaRequest = new XMLHttpRequest();
pub.stb_AlexaRequest.onload = function() { pub.setAlexaStatus(localname);};
pub.stb_AlexaRequest.open( "GET", querystring );
pub.stb_AlexaRequest.send( null );
stb_AlexaQuerystring = querystring;
//alert(querystring);
}
else{
//alert("no install date");
pub.firstTimeRun();
}
}
pub.setAlexaStatus = function(sentURL)
{
try{
var aDoc = pub.stb_AlexaRequest.responseXML;
var bigRanking = aDoc.getElementsByTagName( "POPULARITY" )[0].getAttribute("TEXT");
var littleRanking = pub.getAlexaStatus(bigRanking);
var domainRet = aDoc.getElementsByTagName( "POPULARITY" )[0].getAttribute("URL");
newSentUrl = sentURL.replace(/[^a-zA-Z 0-9]+/g,'');
newCurrLoc = escape(content.document.location).replace(/[^a-zA-Z 0-9]+/g,'');
// if (newSentUrl.match(newCurrLoc) != null || (pub.getDomainOnly(domainRet).match(pub.getDomainOnly(content.document.location)) != null && sentType==1) ){
pub.updateText(bigRanking, 1);
pub.aSite = new pub.SiteInfo(pub.getDomainOnly(content.document.location), 1, bigRanking);
pub.allURLs.push(pub.aSite);
// }
//alert (domainRet);
//alert (bigRanking);
//alert (littleRanking);
}
catch(e){
//alert ("Caught a problem....will put alexa as N/A");
var alexaBut = document.getElementById('SEOTB-Alexa');
alexaBut.setAttribute("tooltiptext", "Alexa Rank: N/A");
alexaBut.setAttribute("image", "chrome://seostatus/skin/pr/aprN.gif");
var alexaStatusBut = document.getElementById('SEOTB-Alexa-status');
alexaStatusBut.setAttribute("tooltiptext", "Alexa Rank: N/A");
alexaStatusBut.setAttribute("image", "chrome://seostatus/skin/pr/alN.png");
}
}
pub.firstTimeRun = function(){
var branch = pub.pref.getBranch("seostatus.");
if (branch.prefHasUserValue("stb_installDate")){
//alert("install date already exists");
return;
}
else{
//alert("About to create install date");
//window.openDialog( "chrome://seostatus/content/options.xul", "seostatus-options-dialog", "centerscreen,chrome,modal" );
var currentTime = new Date();
var month = currentTime.getMonth() + 1;
var day = currentTime.getDate();
var hour = currentTime.getHours();
var min = currentTime.getMinutes();
var sec = currentTime.getSeconds();
var year = currentTime.getFullYear();
var date = year + "" + month + "" + day + "" + hour + "" + min + "" + sec;
var date2 = month + "/" + day + "/" + year;
//alert(date);
branch.setIntPref("stb_installDate", date);
branch.setBoolPref("stb_alexa_agree", true);
branch.setBoolPref("stb_hide_the_meters", false);
var topWindow = com.seostatus.options.getTopWindow();
var STB_tb_pr = topWindow.document.getElementById( "STB_Meters" );
var STB_sb_PR = topWindow.document.getElementById( "STB_statusbar_meters" );
STB_tb_pr.setAttribute("hidden", "false");
STB_sb_PR.setAttribute("hidden", "true");
}
}
pub.getAlexaStatus = function(ar)
{
if( ar < 0 )
{
return 0;
}
var rank = Math.log( ar ) / Math.log( 5 );
rank = Math.floor( rank );
if( rank > 10 )
{
rank = 10;
}
return ( 10 - rank );
}
pub.getDomain = function()
{
var url = new String( window._content.document.location );
return url.replace( /http:\/\/(.+?)\/.*$/gi, "$1" );
}
pub.urlEncode = function( url )
{
return escape(url).replace(/\+/g, '%2B').replace(/\"/g, '%22').replace(/\'/g, '%27');
}
pub.getDomainAndPath = function()
{
var url = new String( window._content.document.location );
return url.replace( /http:\/\/(.+)$/gi, "$1" );
}
pub.getDomainUrl = function()
{
var url = new String( window._content.document.location );
return url.replace( /http:\/\/(.+?)\/.*$/gi, "http://$1/" );
}
/*
function getAlexaNum(sentDomain)
{
var theDomain = 'http://www.rubyweb.org/alexaToolbar.php?domain='+escape(sentDomain)+'&value=true';
var alexaBut = document.getElementById('SEOTB-Alexa');
alexaBut.setAttribute("tooltiptext", "Alexa Rank: Computing...");
alexaBut.setAttribute("image", "chrome://seostatus/skin/pr/aprThink.gif");
pub.makeRequest(theDomain, "1"); // 1 is for alexa...
//alert(theDomain);
// pub.makeRequest(theDomain);
}
function getPRNum(sentDomain)
{
var theDomain = 'http://www.rubyweb.org/pagerankToolbar.php?domain='+escape(sentDomain);
var prBut = document.getElementById('changeMe');
prBut.setAttribute("tooltiptext", "PageRank: Computing...");
prBut.setAttribute("image", "chrome://seostatus/skin/pr/prCompute.gif");
pub.makeRequest(theDomain, "2"); // 1 is for PR...
}
*/
pub.makeRequest = function(sentURL, sentType)
{
var our_request;
if (window.XMLHttpRequest)
{
our_request = new XMLHttpRequest();
if (our_request.overrideMimeType)
{
our_request.overrideMimeType('text/xml');
}
}
if (!our_request)
{
return false;
}
our_request.onreadystatechange = function() { pub.handleValidResponse(our_request, sentType, sentURL);}
our_request.open('GET', sentURL, true);
// alert ("url: "+sentURL);
our_request.send(null);
return true;
}
pub.handleValidResponse = function(sentRequest, sentType, sentURL)
{
var handledValid;
var ready = -1;
var aSite;
if ((handledValid != true) && sentRequest && (sentRequest.readyState == 4) && (sentRequest.status == 200))
{
var xmldocFake = sentRequest.responseXML;
var validDoc = xmldocFake.getElementsByTagName('seostatus').item(0);
if (validDoc != null)
{
alexaRet = xmldocFake.getElementsByTagName('value').item(0).firstChild.data;
domainRet = xmldocFake.getElementsByTagName('domain').item(0).firstChild.data;
// if (sentType == 1) alert(alexaRet);
// if (sentType == 1) alert(domainRet);
// alert ("value: " + alexaRet + " .... domainRet: " + domainRet + "\nType: " + sentType);
handledValid = true;
newSentUrl = sentURL.replace(/[^a-zA-Z 0-9]+/g,'');
newCurrLoc = escape(content.document.location).replace(/[^a-zA-Z 0-9]+/g,'');
//if (sentType == 1) alert("comparing: " + pub.getDomainOnly(domainRet) +"\nto\n"+pub.getDomainOnly(content.document.location));
if (newSentUrl.match(newCurrLoc) != null || (pub.getDomainOnly(domainRet).match(pub.getDomainOnly(content.document.location)) != null && sentType==1) ){
pub.updateText(alexaRet, sentType);
if (sentType == 1) {
pub.updateLexi(content.document.location);
aSite = new pub.SiteInfo(pub.getDomainOnly(content.document.location), sentType, alexaRet);
}
else{
aSite = new pub.SiteInfo(content.document.location, sentType, alexaRet);
}
// alert ("value: "+alexaRet);
pub.allURLs.push(aSite);
//jj// alert("arraylen = "+ pub.allURLs.length + " \nAdding " + content.document.location);
}
}
}
}
pub.updateText = function(sentValue, sentType)
{
try{
if (sentType == 2){
var prBut = document.getElementById('changeMe');
var prButSB = document.getElementById('SEOTB-PR-status');
if (document.getElementById('STB_Meters').getAttribute("hidden") == "true"){
//if the PR meter is not enabled anywhere....
if (document.getElementById('STB_statusbar_meters').getAttribute("hidden") == "true"){
return;
}
}
if (sentValue > 10){
prBut.setAttribute("tooltiptext", "PageRank: Computing...");
prBut.setAttribute("image", "chrome://seostatus/skin/pr/aprThink.gif");
return;
}
if (sentValue != "N"){
prBut.setAttribute("tooltiptext", "PageRank: "+sentValue+"/10");
prButSB.setAttribute("tooltiptext", "PageRank: "+sentValue+"/10");
}
else {
prBut.setAttribute("tooltiptext", "PageRank: Not Ranked");
prButSB.setAttribute("tooltiptext", "PageRank: Not Ranked");
}
prBut.setAttribute("image", "chrome://seostatus/skin/pr/Pagerank"+sentValue+".jpg");
if (sentValue == 'N') sentValue = 0;
prButSB.setAttribute("src", "chrome://seostatus/skin/pr/pr"+sentValue+".png");
}
else
{
// alert("adding '" + sentValue + "' as type " + sentType);
var alexaBut = document.getElementById('SEOTB-Alexa');
var alexaButSB = document.getElementById('SEOTB-Alexa-status');
if (document.getElementById('STB_Meters').getAttribute("hidden") == "true"){
//if the alexa meter is not enabled anywhere....
if (document.getElementById('STB_statusbar_meters').getAttribute("hidden") == "true"){
return;
}
}
var alexaRankTB;
if (sentValue != "N"){
alexaRankTB = pub.getAlexaStatus(sentValue);
alexaBut.setAttribute("tooltiptext", "Alexa Rank: "+pub.addCommas(sentValue));
alexaBut.setAttribute("image", "chrome://seostatus/skin/pr/apr"+alexaRankTB+".gif");
alexaButSB.setAttribute("tooltiptext", "Alexa Rank: "+pub.addCommas(sentValue));
alexaButSB.setAttribute("src", "chrome://seostatus/skin/pr/al"+alexaRankTB+".png");
}
else {
alexaRankTB = "N";
alexaBut.setAttribute("tooltiptext", "Alexa Rank: Not Ranked");
alexaBut.setAttribute("image", "chrome://seostatus/skin/pr/aprN.gif");
alexaButSB.setAttribute("tooltiptext", "Alexa Rank: Not Ranked");
alexaButSB.setAttribute("src", "chrome://seostatus/skin/pr/al0.png");
}
}
}
catch(e){alert(e);}
}
pub.addCommas = function(nStr)
{
nStr += '';
x = nStr.split('.');
x1 = x[0];
x2 = x.length > 1 ? '.' + x[1] : '';
var rgx = /(\d+)(\d{3})/;
while (rgx.test(x1)) {
x1 = x1.replace(rgx, '$1' + ',' + '$2');
}
return x1 + x2;
}
pub.updateLexi = function(sentURL){
var alexa_count;
var tmpDom = 'http://redirect.alexa.com/redirect?'+escape(sentURL);
var tmp_req = new XMLHttpRequest();
if (tmp_req) {
tmp_req.open('GET', tmpDom, true);
// alert ("doing Alexa update: "+tmpDom);
tmp_req.send(null);
}
return;
}
pub.toolbarValue = function(sentAlexa){
alexaRank = sentAlexa.replace(/,/ , "");
alexaRank = alexaRank.replace(/,/ , "");
alexaRank = alexaRank.replace(/,/ , "");
alexaRank = alexaRank.replace(/,/ , "");
alexaRank = alexaRank.replace(/,/ , "");
var alexaToolbarVal = 0;
if (alexaRank > 10000000 || alexaRank == 0)
{
alexaToolbarVal = 0;
}
else if (alexaRank > 2000000) {
alexaToolbarVal = 1;
}
else if (alexaRank > 400000) {
alexaToolbarVal = 2;
}
else if (alexaRank > 200000) {
alexaToolbarVal = 3;
}
else if (alexaRank > 25000) {
alexaToolbarVal = 4;
}
else if (alexaRank > 5000) {
alexaToolbarVal = 5;
}
else if (alexaRank > 1000) {
alexaToolbarVal = 6;
}
else if (alexaRank > 125) {
alexaToolbarVal = 7;
}
else if (alexaRank > 25) {
alexaToolbarVal = 8;
}
else if (alexaRank > 4) {
alexaToolbarVal = 9;
}
else if (alexaRank >= 1) {
alexaToolbarVal = 10;
}
else {
alexaToolbarVal = "N";
}
return alexaToolbarVal;
}
pub.getDomainOnly = function(sentStrObj){
if (sentStrObj == null || sentStrObj.length == 0)
return "";
var url = new String(sentStrObj);
var domain = url.match( /:\/\/(www\.)?([^\/:]+)/ );
if (domain){
domain = domain[2]?domain[2]:'';
}
else domain = "";
return domain;
}
return pub;
}();
window.addEventListener( "focus", function() {com.seostatus.seoPRAlexa.justLoaded();}, true );
window.addEventListener( "load", function() {com.seostatus.seoPRAlexa.firstTimeRun();}, true );